package com.cx.living.lock;

/**
 * @program: pms
 * @author: cx
 * @description:
 * @create: 2024-11-19 11:14
 **/
public class BriefIntroduction {
             //用线程又用了锁，那用线程得意义又是什么呢？

    /*    为什么不能只使用线程？
    如果仅仅使用线程而不加锁，程序就可能会出现竞态条件（race condition），这意味着多个线程在竞争相同资源时，结果可能是不可预测的。

        为什么不能只用锁？
        锁虽然能够保证线程安全，但并不意味着可以完全替代线程。锁并不能使程序并行执行，它只是控制线程访问共享资源的顺序。锁确保的是互斥性和线程安全性，
        但并没有解决如何利用多核 CPU 同时执行多个任务的问题。要获得更高的性能和效率，仍然需要使用多个线程来并行处理不同的任务

    设我们有一个银行账户管理系统，账户有一个余额 balance，多个线程可能同时执行存款和取款操作。如果没有锁机制，多个线程同时执行 balance += 100（存款）或 balance -= 50（取款）时，
     可能会发生以下问题：
    线程 A 读取余额为 1000。
    线程 B 也读取余额为 1000。
    线程 A 执行存款，balance += 100，将余额变为 1100。
    线程 B 执行取款，balance -= 50，将余额变为 950。
    这样，最终的账户余额不符合预期，因为两个线程并发操作时没有加锁，导致余额操作发生了数据竞争。

    为了解决这个问题，我们可以使用锁来确保在任意时刻只有一个线程能修改余额：

      public class BankAccount {
            private int balance = 1000;

            // 使用锁来保证对balance的操作是线程安全的
            public synchronized void deposit(int amount) {
                balance += amount;
            }

            public synchronized void withdraw(int amount) {
                balance -= amount;
            }

            public int getBalance() {
                return balance;
            }
        }


        线程：用于并行化任务，提高程序的效率和响应性。
    锁：用于控制线程访问共享资源，保证线程安全，避免数据竞争。*/


}